package com.dreams.dream.web.listener;

import java.util.HashSet;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * session 监听器, 统计在线人数
 * @author Lawliet
 */
public class OnlineSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {

        HttpSession session = event.getSession();

        ServletContext application = session.getServletContext();

        // 在application范围由一个HashSet集保存所有的session

        HashSet sessions = (HashSet) application.getAttribute("sessions");

        if (sessions == null) {

            sessions = new HashSet();

            application.setAttribute("sessions", sessions);

        }

        // 新创建的session均添加到HashSet集中

        sessions.add(session);

        // 可以在别处从application范围中取出sessions集合

        // 然后使用sessions.size()获取当前活动的session数，即为“在线人数”

    }

    public void sessionDestroyed(HttpSessionEvent event) {

        HttpSession session = event.getSession();

        ServletContext application = session.getServletContext();

        HashSet sessions = (HashSet) application.getAttribute("sessions");

        // 销毁的session均从HashSet集中移除
        sessions.remove(session);
    }

}